fix(chat): prevent flicker from rapid 'Load older history' clicks - #42
Merged
Conversation
Guard loadOlder against re-entry with a per-pane in-flight flag so a burst of clicks enqueues only a single 'older' read instead of churning the timeline page-by-page and re-rendering/flickering the whole panel. Disable the button and show a loading label while an older read is pending, and clear the guard in finally so later single clicks still work with the updated olderCursor. Adds regression coverage for click deduplication, the disabled/loading button state, and cursor dedup.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes chat flicker caused by rapidly clicking "Load older history" in the Electron renderer chat panel. Each click previously enqueued a serial
read('older'); a burst churned the whole conversation history page-by-page, and each page triggered a full timeline re-render plus the scroll-anchoring layout effect, producing visible flickering.The fix adds a per-pane in-flight guard in
ConversationChatPanelForPane:loadOldernow returns early (no-op) when an older read is already pending or no older page exists, sets a synchronousloadingOlderRef, and clears it in afinally.Validation
npm run verifypasses locally (typecheck, biome lint, 584 vitest tests,site:build).src/renderer/chat/ConversationChatPanel.test.tsxadds regression coverage:olderread,olderCursor.olderread executes and no page-jump flicker occurs.Checklist
npm run verifypasses locally.